package com.codeplatform.dto;

import lombok.Data;
import lombok.Builder;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;

/**
 * 代码执行结果DTO
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class CodeExecutionResult {
    
    /**
     * 执行状态：0-失败，1-成功，2-超时，3-内存超限，4-编译错误，5-运行时错误
     */
    private Integer status;
    
    /**
     * 状态描述
     */
    private String statusMessage;
    
    /**
     * 标准输出
     */
    private String output;
    
    /**
     * 错误输出
     */
    private String error;
    
    /**
     * 执行时间（毫秒）
     */
    private Long executionTime;
    
    /**
     * 内存使用量（KB）
     */
    private Long memoryUsage;
    
    /**
     * 编译信息（如果有）
     */
    private String compileInfo;
    
    /**
     * 退出码
     */
    private Integer exitCode;
    
    /**
     * 是否执行成功
     */
    private Boolean success;
    
    /**
     * 记录ID（如果保存了记录）
     */
    private Long recordId;
    
    /**
     * 创建成功结果
     */
    public static CodeExecutionResult success(String output, Long executionTime, Long memoryUsage) {
        return CodeExecutionResult.builder()
                .status(1)
                .statusMessage("执行成功")
                .output(output)
                .executionTime(executionTime)
                .memoryUsage(memoryUsage)
                .success(true)
                .exitCode(0)
                .build();
    }
    
    /**
     * 创建失败结果
     */
    public static CodeExecutionResult failure(String error, Integer status, String statusMessage) {
        return CodeExecutionResult.builder()
                .status(status)
                .statusMessage(statusMessage)
                .error(error)
                .success(false)
                .build();
    }
    
    /**
     * 创建编译错误结果
     */
    public static CodeExecutionResult compileError(String compileInfo) {
        return CodeExecutionResult.builder()
                .status(4)
                .statusMessage("编译错误")
                .compileInfo(compileInfo)
                .error(compileInfo)
                .success(false)
                .build();
    }
    
    /**
     * 创建超时结果
     */
    public static CodeExecutionResult timeout() {
        return CodeExecutionResult.builder()
                .status(2)
                .statusMessage("执行超时")
                .error("代码执行超时")
                .success(false)
                .build();
    }
    
    /**
     * 创建内存超限结果
     */
    public static CodeExecutionResult memoryLimit() {
        return CodeExecutionResult.builder()
                .status(3)
                .statusMessage("内存超限")
                .error("内存使用超出限制")
                .success(false)
                .build();
    }
}